package com.kaifamiao.immutable;

/**
 * 不变类( immutable class ):
 *    (1)、被 final 修饰的类是最终类 (最终类没有子类)
 *    (2)、在 最终类 中定义的 实例变量 最好是被 final 所修饰
 *    (3)、若实例变量是非 final的，则不能提供用于修改 非final实例变量 的方法
 */
public final class Decimal {

    // 被 final 修饰的变量是 最终变量
    private final long value;

    public Decimal( long value ){
        this.value = value ;
    }

    @Override
    public String toString() {
        return "" + value ;
    }

    public static void main(String[] args) {
        // 不变对象(immutable object):
        //    对象一经创建再也不能改变其内部实例变量的值
        Decimal d = new Decimal( 101 );
        System.out.println( d ); // d == null ? "null" : d.toString()

        Decimal x = new Decimal( 101 );
        System.out.println( x );

        // 修改引用变量 x 的值 (即重新赋值)
        x = new Decimal( 200 );
        System.out.println( x );

    }
}
